#pragma once
#include"TcpServer.h"
#include"EventLoop.h"
#include"Connection.h"
#include"ThreadPool.h"

/*
    EchoServer类：回显服务器
*/ 
class EchoServer
{
private:
    TcpServer tcpserver_;
    // 工作线程池
    ThreadPoll threadPoll_;
public:
    EchoServer(const std::string &ip, const uint16_t port, int threadNum = 3, int workThreadNum = 3);
    ~EchoServer();
    // 运行事件循环
    void Start();
    // 处理新客户端连接请求，在TcpServer类中回调此函数
    void HandleNewConnection(std::shared_ptr<Connection> conn);
    // 关闭客户端的连接，在TcpServer类中回调此函数
    void HandleCloseConnection(std::shared_ptr<Connection>conn);
    // 客户端的连接错误，在TcpServer类中回调此函数
    void HandleErrorConnection(std::shared_ptr<Connection>conn);
    // 处理客户端的请求报文，在TcpServer类中回调此函数
    void HandleMessage(std::shared_ptr<Connection>conn, std::string& message);
    // 缓冲区数据发送完成后，在TcpServer中回调此函数
    void HandleSendComplete(std::shared_ptr<Connection>conn);
    // epoll_wait超时，在TcpServer中回调此函数
    void HandleEpollTimeOut(EventLoop *loop);
    // 处理客户端的请求，添加给线程池
    void OnMessage(std::shared_ptr<Connection>conn, std::string& message);
};